/**
 * @author  夏尉
 * @version 0.1
 */

/**
 * @class
 */
var AdminCommon = {};
window.UEDITOR_HOME_URL = path + "/js/ueditor1.4.3.3/";

function ajaxFormPost(action, formId, successCb, errorCb) {
    $.ajax({
        type: "POST",
        url: path + action,
        processData: true,
        data: $("#" + formId).serialize(),
        success: function (data) {
            if (data.error == 0) {
                $.jBox.prompt('操作成功', '提示', 'success', {
                    closed: function () {
                        successCb(data.data);
                    }
                });
            } else {
                $.jBox.prompt(data.message, '错误', 'error', {
                    closed: function () {
                        errorCb();
                    }
                });
            }
        }
    });
}
function ajaxDataPost(action, data, successCb, errorCb) {
    $.post(path + action, data, function (data) {
        console.log(data);
        if (data.error == 0) {
            $.jBox.prompt('操作成功', '提示', 'success', {
                closed: function () {
                    successCb(data.data);
                }
            });
        } else {
            $.jBox.prompt(data.message, '错误', 'error', {
                closed: function () {
                    errorCb();
                }
            });
        }
    });
}
function jumpTab(name, action) {
    if ($("#tabs").tabs('exists', name)) {
        $("#tabs").tabs('select', name)
    } else {
        if ($("#tabs").tabs('getTab', 0)) {
            $("#tabs").tabs('close', 0)
        }
        $("#tabs").tabs('add', {
            title: name,
            closable: true,
            href: path + action
        });
    }
}
function refreshTab(url) {
    var tab = $('#tabs').tabs('getSelected');  // get selected panel
    tab.panel('refresh', path + url);
}

function refreshAdmin() {
    window.location = path + "/admin";
}

(function () {


    /**
     * 通过表单id来ajax提交表单，后台返回的json data.error==0代表成功，data.error不为0则为失败，失败请传入data.meesage,会在页面上提示出来
     * @param action {string}请求地址
     * @param formId {string}表单的id，
     * @param successCb {Fuction}成功的回调方法
     * @param errorCb  {Fuction} 失败的回调方法
     * @example
     * AdminCommon.ajaxFormPost('/admin/addUser','addUserForm',
     * 		function(){
     * 			AdminCommon.refreshTab('/admin/userList');//刷新当前tab为用户列表
     * 		},
     * 		function(){
     * 			AdminCommon.refreshTab('/admin/userList');//刷新当前tab为用户列表
     * 		});
     */
    AdminCommon.ajaxFormPost = function(action, formId, successCb, errorCb) {
        $.ajax({
            type: "POST",
            url: path + action,
            processData: true,
            data: $("#" + formId).serialize(),
            success: function (data) {
                if (data.error == 0) {
                    $.jBox.prompt('操作成功', '提示', 'success', {
                        closed: function () {
                            successCb(data.data);
                        }
                    });
                } else {
                    $.jBox.prompt(data.message, '错误', 'error', {
                        closed: function () {
                            errorCb();
                        }
                    });
                }
            }
        });
    };

    /**
     * 提交表单，与{@link ajaxFormPost}不同的是第二个参数是直接传入json而不是表单的id
     * @param action {string}请求地址
     * @param data {json}json数据
     * @param successCb {Fuction}成功的回调方法
     * @param errorCb  {Fuction} 失败的回调方法
     * @example
     * 	AdminCommon.ajaxDataPost('/admin/addUser',{userName:username,icon:icon},
	 *	 	function(){
	 * 			AdminCommon.refreshTab('/admin/userList');//刷新当前tab为用户列表
	 * 		},
	 * 		function(){
	 * 			AdminCommon.refreshTab('/admin/userList');//刷新当前tab为用户列表
	 * 		});
     * 
     * 
     */
    AdminCommon.ajaxDataPost = function (action, data, isShowMsg,successCb, errorCb) {
    		if(typeof(isShowMsg)=="function"){
    			this.ajaxDataPost(action, data, true,isShowMsg,successCb,)
    		}else{
    			$.post(path + action, data, function (data) {
    	            if (data.error == 0) {
	    	            	if(isShowMsg){
	    	                $.jBox.prompt('操作成功', '提示', 'success', {
	    	                    closed: function () {
	    	                    		successCb&&successCb(data.data);
	    	                    }
	    	                });
	    	            	}else{
	    	            		successCb&&successCb(data.data);
    	                }
    	            } else {
    	            		if(isShowMsg){
	    	                $.jBox.prompt(data.message||"出错啦！", '错误', 'error', {
	    	                    closed: function () {
	    	                    		errorCb&&errorCb();
	    	                    }
	    	                });
    	            		}else{
    	            			errorCb&&errorCb();
    	                }
    	            }
    	        });
    		}
        
    }
    /**
     * 通过表单id来ajax提交表单，后台返回的json data.error==0代表成功，data.error不为0则为失败，失败请传入data.meesage,会在页面上提示出来
     * @param action {string}请求地址
     * @param formId {string}表单的id，
     * @param successCb {Fuction}成功的回调方法
     * @param errorCb  {Fuction} 失败的回调方法
     * @example
     * AdminCommon.ajaxFormPost('/admin/addUser','addUserForm',
     * 		function(){
     * 			AdminCommon.refreshTab('/admin/userList');//刷新当前tab为用户列表
     * 		},
     * 		function(){
     * 			AdminCommon.refreshTab('/admin/userList');//刷新当前tab为用户列表
     * 		});
     */
    AdminCommon.ajaxWebFormPost = function(action, formId, successCb, errorCb) {
        $.ajax({
            type: "POST",
            url: path + action,
            processData: true,
            data: $("#" + formId).serialize(),
            success: function (data) {
                if (data.error == 0) {
                        successCb(data.data);
                } else {
                        errorCb(data.data);
                }
            }
        });
    };
    

    /**
     * 关闭当前并打开一个新的tab
     * @param {String}name tab的名称
     * @param {string}action 请求的地址
     * @example
     * AdminCommon.jumpTab('/admin/userList');
     */
    AdminCommon.jumpTab = function (name, action) {
        if ($("#tabs").tabs('exists', name)) {
            $("#tabs").tabs('select', name)
        } else {
            if ($("#tabs").tabs('getTab', 0)) {
                $("#tabs").tabs('close', 0)
            }
            $("#tabs").tabs('add', {
                title: name,
                closable: true,
                href: path + action
            });
        }
    };

    /**
     * 刷新当前tab 与{@link jumpTab}方法不同的是这个方法是刷新当前的tab，不会改变tab的名称
     *  * @example
     * AdminCommon.refreshTab('/admin/userList');
     * @param {string}url 刷新的请求
     */
    AdminCommon.refreshTab = function (url) {
        var tab = $('#tabs').tabs('getSelected');  // get selected panel
        tab.panel('refresh', path + url);
    };
    
    /**
     * 刷新当前tab 与{@link jumpTab}方法不同的是这个方法是刷新当前的tab，不会改变tab的名称
     *  * @example
     * AdminCommon.refreshTab('/admin/userList');
     * @param {string}url 刷新的请求
     */
    AdminCommon.refreshTabByContent = function (content) {
        var tab = $('#tabs').tabs('getSelected');  // get selected panel
        tab.panel({content:content});
    };

    /**
     * 刷新后台页面
     */
    AdminCommon.refreshAdmin = function () {
        window.location = path + "/admin";
    }

    /**
     * 警告提示框
     * @example
     * AdminCommon.popWarnning('请填写字段',function(){
 *      //你下一步的操作
 * })
     * @param {string}message 提示内容
     * @param {Function}successCb 点击确定的回调回调方法，如无可以不填
     */
    AdminCommon.popWarnning = function (message, successCb) {
        $.jBox.prompt(message, '提示', 'warning', {
            closed: function () {
                if (successCb)
                    successCb();
            }
        });
    };
    /**
     * 成功提示框
     * @example
     * AdminCommon.popSuccess('操作成功',function(){
 *      //你下一步的操作
 * })
     * @param {string}message 提示内容
     * @param {Function}successCb 点击确定的回调回调方法，如无可以不填
     */
    AdminCommon.popSuccess = function (message, successCb) {
        $.jBox.prompt(message, '提示', 'success', {
            closed: function () {
                if (successCb)
                    successCb();
            }
        });
    };

    /**
     * 错误提示框
     * @example
     * AdminCommon.popError('操作失败',function(){
 *      //你下一步的操作
 * })
     * @param {string}message 提示内容
     * @param {Function}successCb 点击确定的回调回调方法，如无可以不填
     */
    AdminCommon.popError = function (message, successCb) {
        $.jBox.prompt(message, '提示', 'error', {
            closed: function () {
                if (successCb)
                    successCb();
            }
        });
    }
    /**
     * 确认框
     * @example
     * AdminCommon.popConfirm('确认操作吗？',function(){
     *      //你下一步的操作
     * })
     * @param {string}message 提示内容
     * @param {Function}successCb 点击确定的回调回调方法，如无可以不填
     */
    AdminCommon.popConfirm = function (message, successCb) {
        var submit = function (v, h, f) {
            if (v == 'ok')
                if (successCb)
                    successCb();
            return true; //close
        };
        $.jBox.confirm(message, "提示", submit);
    }
    
    /**
     * 弹出层
     * @example
     * AdminCommon.showModal('/appApi/jingXuan',1);
     * @param {string}url 弹出层远程加载的内容
     * @param {Function}type type=1大的弹出层，type=2小的弹出层
     */
    AdminCommon.showModal = function(url,type){
    	type = type?type:1;
    	if(type==1){
    		$("#myLargerModal").modal({
        	    remote: path+url
        	});
    	}else{
    		$("#myModal").modal({
        	    remote: path+url
        	});
    	}
    	
    }
    
    /**
     * 隐藏所有弹出层
     * @example
     * AdminCommon.hideModal();
     */
    AdminCommon.hideModal = function(){
		$("#myLargerModal").modal("hide");
		$("#myModal").modal("hide");
    }
    
    /**
     * 阻止事件冒泡
     * @example
     * AdminCommon.stopBubble(event);
     * @param {Object}event 事件
     */
    AdminCommon.stopBubble = function(event){
	    var e=arguments.callee.caller.arguments[0]||event;
	    if(e&&e.stopPropagation){
	        e.stopPropagation()
	    }else if(window.event){
	        window.event.cancelBubble=true;
	    }
	}
    /**
     * 阻止默认事件
     * @example
     * AdminCommon.stopDefault(event);
     * @param {Object}event 事件
     */
    AdminCommon.stopDefault = function(event){
	    var e=arguments.callee.caller.arguments[0]||event;
	    //阻止默认浏览器动作(W3C)
	    if(e&&e.preventDefault){
	        e.preventDefault();
	    }else{
	        //IE中阻止函数默认动作的方式
	        window.event.returnValue=false;      
	    }
	    return false;
	}
})();